import java.util.Date;

import jdk.nashorn.internal.runtime.regexp.joni.constants.internal.OPCode;

public class OprandCodeTest {
	public static void main(String[] args) {

	}

	// 1、局部变量压栈指令
	public void load(int num, Object obj, long count, boolean flag, short[] arr) {
		System.out.println(num);
		System.out.println(obj);
		System.out.println(count);
		System.out.println(flag);
		System.out.println(arr);
		
		OprandCodeTest oprandCodeTest=this;
	}

	// 2、常量入栈指令
	public void pushConstantLdc() {
		int i = -1;
		int a = 5;
		int b = 6;
		int c = 127;
		int d = 128;
		int e = 32767;
		int f = 32768;
		float fl = 33333;
		long l=3333;
	}
	
	public void constLdc() {
		long a1=1;
		long a2=2;
		float b1=2;
		float b2=3;
		double c1=1;
		double c2=2;
		Date date=null;
		Date date2=new Date();
	}
	
	//3、出栈装入局部变量表指令
	/**
	 * 分析：
	 * 局部变量表有1个int,1个double(2个槽位)，
	 * 1个int，1个long(2个槽位)
	 * 1个String(1个槽位)
	 * 1个float(1个槽位)
	 * 
	 * 总共有6个局部变量 + 1个this指针（也就是7个）
	 * 但是需要9个槽位。
	 * 
	 * 
	 * @param k 第一个参数
	 * @param d 第二个参数
	 **/
	public void store(int k,double d) {
		/**
		 * 局部变量k入栈 使用iload_1指令
		 * 常量2入栈 iconst_2
		 * 然后执行iadd,结果放入操作数栈
		 * 最后出栈装入局部变量表，istore_4
		 * 
		 */
		int m=k+2;
		long l =12;
		String string="fff";//astore
		float f=10.0f;
		d=10;
	}
	public void show() {
		System.out.println("hi");
	}
	public void test(int i) {
		OprandCodeTest oprandCodeTest = this;
		oprandCodeTest.show();
	}
}
